Input da Seriale/Ethernet

I dati possono provenire anche da una Bilancia o da uno Scanner di Barcode o da un PLC. In generale da qualunque dispositivo che è in grado di inviare delle informazioni su un canale seriale tipo RS232 o su uno Ethernet. La logica sarà sempre quella di usare i file per scambiare le informazioni. Quindi al momento della ricezione metteremo le informazioni in una serie di file attraverso un "Driver", poi al momento giusto preleveremo tali informazione che saranno disponibili al nostro progetto fatto con BuilderOne o più in generale a LabelOne per la stampa di etichette. L'arrivo dei dati può anche "scatenare" degli automatismi "condizionati". Questo vuol dire che possiamo controllare se i dati sono soddisfano delle condizioni e se si scatenare la pressione di un pulsante a cui saranno associate una serie di azioni.

Il primo passo da fare è di realizzare una sorta di "Driver" che è in grado di interpretare il dato in arrivo. Se ad esempio dalla seriale arriva il dato a lunghezza fissa SPPPPPPTTTTTTE dove S è lo start PPPPPP il peso TTTTTT la tara ed E l'end, dovremo controllare la lunghezza, ignorare S, mettere PPPPPP nel file peso.txt, TTTTTT nel file tara.txt ed ignorare E. Tutto questo viene fatto "Configurando" un generico driver.

 

Aggiungere un Canale di comunicazione

Dopo aver premuto il pulsante "Ingresso: Bilancia, Sanner, Sincronismo..", si aprira la finestra per selezionare, aggiungere, modificare un "Canale".

 

Nel nostro caso visto che non esistono Canali Installati, ne Aggiungiamo uno premendo il pulsante "Aggiungi".

Ora selezioniamo il canale appena aggiunto e vedremo che il tasto "Configura" si abilita. Premiamo sul tasto Configura per modificare la configurazione.

 

Configurare un Canale di comunicazione

I parametri da configurare Sono tanti, ma non tutti servono al nostro caso. Di seguito descriveremo il significato dei vari parametri, e poi faremo l'esempio con alcuni casi pratici.

 

Carica/Salva

Permette di salvare una configurazione per poterla richiamare per una successiva applicazione. Se ad esempio realizziamo il canale di comunicazione per una particolare bilancia, possiamo salvarlo e usarlo per tutte quelle applicazioni che fanno uso di quel tipo di bilancia. In ogni caso conviene salvare il canale che abbiamo realizzato alla fine della configurazione. Uscendo dalla finestra "Configurazione del Canale" con il tasto Conferma, salveremo comunque il nostro canale, ma se per errore lo eliminiamo o vogliamo adoperare lo stesso canale in un'altra applicazione fatta con BuilderOne, non potremo usare/richiamare quello già fatto. Quindi si consiglia di usare il tasto Salva e di dare un nome quanto più esplicito possibile alla configurazione.

 

Descrizione

Serve per riconoscere il tipo di canale seriale nel caso siano presenti più canali seriali. Supponiamo infatti di avere più bilancia collegate alle seriali. Le bilance sarebbero riconoscibili solo per la porta seriale input_Com1, input_Com2. Se invece usiamo una descrizione possiamo distinguerle più facilmente BilanciaMagazzino_Com1, BilnciaUfficio_Com2. L'estenzione Com1, Com2 viene aggiunta in automatico.

 

Configurare la porta

Configurare la porta significa scegliere se COM o ETHERNET e inserire i vari parametri.

Nel nostro caso selezioneremo una COM3. La presenza di altre COM dipende dal PC su cui si lavora. Se sul PC non sono installate COM la lista delle com sarà vuota.

 

Oltre al nome della porta è possibile settare la velocità. Le altre opzioni sono fisse, ma se è necessario è possibile abilitare la configurazione completa della RS232. Per default tale configurazione è limitata alla sola velocità per evitare che utenti "non esperti" si trovino in imbarazzo o generino una configurazione non adatta.

 

Per abilitare la configurazione completa della RS232 bisogna aggiungere o modificare se gia' esiste la chiave varieRS232Full=true nel file initProperties. Un altro modo, è di avviare l'editor di etichette LabelOne e di modificare in Configura->Opzioni

 

Nel pannello Varie->Configurazione Completa della RS232

 

Poi riavviando BuilderOne accedendo alla configurazione della porta seriale troveremo tutti i parametri configurabili

 

Risposta ACK

Alcune bilancie richiedono una risposta di corretta ricezione, dopo aver inviato il peso. In particolare richiedono ACK Acknowledgment (ascii 06) come risposta. Questa opzione va solo usata in quei casi.

 

TimeOut Ricezione Dati

Questo parametro serve per generare un sincronismo per i pacchetti ricevuti. Va inteso come il massimo intervallo di tempo che può trascorrere fra due successivi caratteri. Non è la durata della ricezione dell'intera stringa dato, ma solo il tempo massimo fra i singoli caratteri. Di solito si immagina che la stringa dati ci giunga tutta intera, non spezzattata in caratteri, ma il caso più frequente è che tale stringa è una sequenza di caratteri, con un intervallo di tempo fra un carattere e quello successivo. E' molto importante tener conto di tale intervallo di tempo. Il TimeOut > intervallo carattere. Scaduto tale intervallo di tempo se la stringa non è completa, tale stringa viene gettata via. In questo caso si suppone che la comunicazione si sia interrotta. Pensiamo al caso che la bilancia venga spenta, o che venga staccato il cavo di connessione. Se non esistesse un TimeOut la comunicazione non funzionerebbe più perche rimarrebbe in attesa di una parte della stringa che non giungerà mai.

Il valore di 100ms è adatto alla maggior parte dei casi. In ogni caso è possibile fare un test per la verifica di tale tempo.

 

Regole del Protocollo

Per Regola di un protocollo si intende il modo cun cui i dati vengono forniti dal Device (la Bilncia nel nostro esempio). Se la regola è unica è sufficiente un solo pannello:

UNA SOLA REGOLA

Richiesta Peso

SKPPPPPPkgTTTTTTg_E

 

Se invece siamo nel caso di più regole:

PIU' REGOLE

Richiesta Peso

SKPPPPPPkgTTTTTTg_E

Richiesta Articolo

SpluCCCCDDDDDDDDDUUUUE

 

Campi di una regola

Ogni regola è caratterizzata da un certo numero di campi che dovranno essere configurati. Nell'esempio "SKPPPPPPkgTTTTTTg E" ci sono 7 campi. In seguito mostreremo come questi vanno configurati.

Campo0

S

Campo1

K

Campo2

PPPPPP

Campo3

kg

Campo4

TTTTTT

Campo5

g

Campo6

E

 

Regola a lunghezza Fissa/Variabile

Di seguito sono riportati due esempi con cui si chiarisce cosa si intende per lunghezza fissa e lunghezza variabile.

Lunghezza Fissa

dato 1

SK000123kg000020g_E

dato 2

SK001567kg000240g_E

Lunghezza Variabile

dato 1

SK1,23kg20g_E

dato 2

SK15,67kg240g_E

 

Richiesta Dati

La richiesta dati si usa quando il dispositivo non invia spontaneamente i dati ma su richiesta. In tal caso può essere inserito un comando per la richiesta e un intervallo di tempo per l'invio della richiesta. Il comando per la richiesta dati può essere una stringa che contiene anche valori binari. se ad esempio la richiesta viene effettuata attraverso ENQ che è il carattere ascii 5, poichè sarebbe impossibile inserire itale carattere in una finestra di testo, useremo la convenzione ASCII(5). Così potremo inserire tutti i valori binari necessari. Se occorresse ENQ+CR+LF nella finestra va scritto ASCII(5)ASCII(13)ASCII(10).

 

Uscita

E' possibile abilitare i dati in uscita per effettuare un colloquio bidirezionale con il device. Questo risulta utile quando è necessario inviare al device perticolari comandi. I comandi vanno scritti in un file e tale file va indicato nella finestra sottostante. Quando il comando verrà scritto il programma lo invierà al dispositivo e cancellerà il file. <nel file possono essere inseriti anche dei comandi speciali.

Se nel file scriviamo:
$S#
L1_wait(100)
$S#

Il programma invierà $S# poi attenderà 100ms e poi invierà nuovamente $S#.

Se nel file scriviamo:
$S#
L1_wait(ASCII(5),100)
$S#

Il programma invierà $S# poi attenderà la risposta ENQ e poi invierà nuovamente $S#.

Se la risposta ENQ non arriva entro 100ms il successivo comando viene inviato comunque allo scadere del timeout.

Esempio di una sola regola a lunghezza fissa

Supponiamo che questa "SKPPPPPPkgTTTTTTg E" sia la regola da realizzare (dopo la "g" c'è uno spazio).

Per prima cosa inseriamo una descrizione. Nel nostro caso Risposta alla richiesta Peso.

 

Inserimo una descrizione breve "Peso" che ci servirà per eventuali automatismi.

In questo modo potremo assegnare un pulsante di Stampa o Sequencer a questa regola e quando la regola è soddisfatta, cioè arriva il dato che soddisfa questa regola il pulsante viene premuto ed esegue la lista di azioni ad esso collegata.

 

Nella nostra ipotetica regola SKPPPPPPkgTTTTTTg E il primo campo S è il carattere di Start. Per noi questo campo è il Campo "0".

Selezioniamo il primo campo "0" fleggandolo, cosi' si abilita il pulsantino sotto che ci consente di configurare il campo "0".

 

Inseriamo "1" nel Numero di caratteri, infatti il campo "0" è un carattere di start, quindi un solo carattre. Non lo memoriziamo perchè non ci serve.

 

Il secondo campo (il campo"1") è K che nella nostra ipotesi contiene il carattere peso stabile ad esempio "S" per stabile "N" per non stabile.

Flegghiamo il campo 1 e premiamo sul pulsante sotto in corrispondenza per configurare il campo 1

 

Inseriamo "1" nel Numero di caratteri, infatti il campo "1" è un carattere "S" o "N", quindi un solo carattre. Flegghiamo Memorizza in File, in questo modo si abilita il pulsante che ci consente di cercare il file in cui memorizzare l'informazione peso stabile. Poichè molto probabilmente il file non esiste, basterà digitare il suo nome anche senza prolungamneto. Non cambiare la cartella di lavoro. I file verranno tutti creati nella cartella Data del progetto.

 

Passiamo al dato peso che supporremo un dato a lunghezza fissa con zeri in testa ad esemppio 001230 per 1,230kg. Il dato è PPPPPP nella striga SKPPPPPPkgTTTTTTg E. E' lungo 6 caratteri quindi...

 

Inseriamo 6 nel "Numero di Caratteri", flegghiamo "Memorizza in File", e usiamo "Sfoglia" per inserire il nome del file in cui memorizzeremo il peso Peso.txt

 

Passiamo al dato "kg" che supporremo un dato a lunghezza fissa rappresentante l'unità di misura del peso.

 

Sarà di lunghezza 2 e lo memorizziamo nel file Unita.txt

 

Passiamo al dato tara che supporremo un dato a lunghezza fissa con zeri in testa ad esemppio 000020 per 20g. Il dato è TTTTTTnella striga SKPPPPPPkgTTTTTTg E. E' lungo 6 caratteri quindi...

 

Inseriamo 6 nel "Numero di Caratteri", flegghiamo "Memorizza in File", e usiamo "Sfoglia" per inserire il nome del file in cui memorizzeremo la tara Tara.txt

 

Passiamo al dato "g " che supporremo un dato a lunghezza fissa rappresentante l'unità di misura della tara.

 

Sarà di lunghezza 2 e lo memorizziamo nel file UnitaTara.txt

 

Passiamo al dato "E" che supporremo un dato a lunghezza fissa rappresenta il terminatore. In realtà bisogna stare attenti al fatto che di solito le stringhe peso sono terminate da caratteri non visibili come ad esempio CRLF (ascii(13)ascii(10)). Quindi nel nostro caso oltre al carattere E supponiamo ci siano CRLF qubidi un totale di 3 caratteri. Se non siamo sicuri di come è fatta la stringa peso conviene osservarla attraverso il term come vedremo di seguito.

 

Inseriamo lunghezza 3 e non memorizziamo.

 

Alla fine ci troveremo con una stringa di lughezza 21, possiamo controllare le lunghezze dei singoli campi riportate sotto ogni campo.

Esempio di una sola regola a lunghezza Variabile

Supponiamo che questa "SKPkgTg E" sia la regola da realizzare (dopo la "g" c'è uno spazio). Affinche i dati a lunghezza variabile Peso (P) e Tara (T) vengano correttamente individuati è necessario un terminatore. Nel nostro caso il terminatore è kg per il peso e g per la tara. E' necessario che il terminatore non cambi nel tempo.

La realizzazione del driver sarà uguale a quella del caso dei dati a lunghezza fissa, tranne per quanto riguarda il peso e la tara che sono i due dati a lunghezza variabile. In ogni caso riportiamo tutti i passaggi necessari, anche se già visti nel caso dei dati a lunghezza fissa.

Per prima cosa inseriamo una descrizione. Nel nostro caso Risposta alla richiesta Peso.

 

Inserimo una descrizione breve "Peso" che ci servirà per eventuali automatismi.

In questo modo potremo assegnare un pulsante di Stampa o Sequencer a questa regola e quando la regola è soddisfatta, cioè arriva il dato che soddisfa questa regola il pulsante viene premuto ed esegue la lista di azioni ad esso collegata.

 

Nella nostra ipotetica regola SKPkgTg E il primo campo S è il carattere di Start. Per noi questo campo è il Campo "0".

Selezioniamo il primo campo "0" fleggandolo, cosi' si abilita il pulsantino sotto che ci consente di configurare il campo "0".

 

Inseriamo "1" nel Numero di caratteri, infatti il campo "0" è un carattere di start, quindi un solo carattre. Non lo memoriziamo perchè non ci serve.

 

Il secondo campo (il campo"1") è K che nella nostra ipotesi contiene il carattere peso stabile ad esempio "S" per stabile "N" per non stabile.

Flegghiamo il campo 1 e premiamo sul pulsante sotto in corrispondenza per configurare il campo 1

 

Inseriamo "1" nel Numero di caratteri, infatti il campo "1" è un carattere "S" o "N", quindi un solo carattre. Flegghiamo Memorizza in File, in questo modo si abilita il pulsante che ci consente di cercare il file in cui memorizzare l'informazione peso stabile. Poichè molto probabilmente il file non esiste, basterà digitare il suo nome anche senza prolungamneto. Non cambiare la cartella di lavoro. I file verranno tutti creati nella cartella Data del progetto.

 

Passiamo al dato peso che supporremo un dato a lunghezza variabile ad esemppio 1,230 o 15,5. Il dato è P nella striga SKPkgTg E. Affinche tale dato venga correttamente individuato è necessario un terminatore. Nel nostro caso il terminatore è kg. Per questo motivo è necessario che il terminatore non cambi nel tempo.

 

Selezionare nel "Tipo dati nel campo" Stringa a lunghezza Variabile e nella finestra terminatore scrivere kg

 

Passiamo al dato tara. Il dato è T nella striga SKPkgTg E. Il terminatore è "g E"+CRLF.

 

Selezionare nel "Tipo dati nel campo" Stringa a lunghezza Variabile e nella finestra terminatore scrivere "g E"+CRLF

 

Verifica delle stringa peso inviata dalla bilancia

Molto spesso i manuali non riportano esattamente la striga inviata dalla bilancia perche' magari si riferiscono ad un protocollo precedente o successivo. Vale la pena di dare un'occhiata prima di procedere Alla configurazione del canale. Per controllare la stringa possiamo usare il "Term"

 

Si aprira' una finestra che consente di "Vedere" i dati ricevuti dal dispositivo e di inviarne semplicemente digitandoli nella finestra. Piochè molto spesso i dati ricevuti sono "non stampabili" cioè non si vedono come CRLF, è possibile configurare il Term alla ricezione in esadecimale. In questo modo "vediamo" tutti i caratteri.

 

Simulazione della Bilancia/Dispositivo

In molti casi si conosce il protocollo di comunicazione di un dispositivo, ma non si ha fisicamente il dispositivo. Questo non ci permette di fare delle "prove" di verifica del driver realizzato. Per ovviare a questo inconveniente è possibile usare un tool dato in dotazione con LabelOne/BuilderOne. Si trova nella cartella "uty" e si chiama ExtDataTest.jar

Basterà cliccarci su due volte per farlo partire. Per simulare un dispositivo reale conviene inserire un ritardo fra i caratteri 2o3 ms.

 

Per usare il "Test invio dati" bisogna avere due COM una sarà collegata al Test invio dati che simulerà la bilancia, l'altra sarà collegata al progetto di BuilderOne. Per fare comunicare le due seriali bisognarà fisicamente collegarle con un cavo seriale cross

 

In questo modo i dati inviati da "Test invio dati" attraverso Tx giungeranno al pin Rx della seriale collegata al progetto e verranno interpretati dal Canale.

Nel nostro caso scriviamo SKPPPPPPkgTTTTTTg EASCII(13)ASCII(10) nel dato da inviare e colleghiamo la porta corretta al programma "Test invio dati" e premiamo sul pulsante "invio manuale".

 

Come si può notare non si vedono i due caratteri di chiusura CRLF. Per poterli vedere dobbiamo usare il Term in esadecimale 0x0D 0x0A sono 13 e 10 cioè CRLF.

come si può notare si tratta di 21 caratteri

Test della decodifica del Canale

Dopo aver configurato il canale per ricevere il dato SKPPPPPPkgTTTTTTg EASCII(13)ASCII(10), usiamo il "Test invio dati" e inseriamo 2ms come ritardo fra i caratteri, SKPPPPPPkgTTTTTTg EASCII(13)ASCII(10) nel dato da inviare poi o premiamo il pulsante "invio dati manuale" oppure flegghiamo "Invio Aut. Dato ogni 500ms" e premiamo "Start". Ovviamente tutto questo con il cavo cross collegato e con BuilderOne in esecuzione.

 

Come si può notare nella finestra di debug del progetto il dato è decodificato correttamente (ok fix len=21). Siamo avvisati che la regola a lunghezza fissa costituita da 21 caratteri è stata soddisfatta. Inoltre possiamo osservare che usando l'invio automatico dopo 500ms possiamo fare una media dei tempi intercorsi per ricevere la stringa di dati. Nel nostro caso abbiamo impiegato 62ms minimo e 81 ms massimo per ricevere la stringa completa. Il Massimo tempo inrtercorso fra la ricezione di due caratteri successivi è 20ms. Questa appare come un'incoerenza visto che inviamo i dati con 2ms di ritardo. Ma c'è di mezzo il PC e il sistema operativo, che non è in tempo reale e quindi rileva la presenza di dati nella seriale quando ha tempo. Se andassimo a verifivare vedremmo che molti caratteri vengono ricevuti "attaccati" ad altri poi un intervallo di 20ms po il resto dei caratteri "attaccati".

Anche aumentando l'intervallo di tempo fra i caratteri i 20ms non cambiano mentre aumenta il tempo totale di ricezione. In ogni caso conviene testare tali valori e impostare il TimeOut di ricezione in modo da soddisfare certamente il maxCharDeltaTime. Nel nostro caso possono andare bene 100ms.

 

Uso dei dati da Seriale/Ehternet

Vediamo ora come sia possibile usare i dati provenienti da una seriale in un progetto. in particolare vedremo come inserirli in un frame del progetto HelloWorld. A tale scopo Facciamo un frame che chiameremo Peso in cui mettiamo il solito pulsante esci

 

Aggiungiamo un monitor di file e scegliamo come file il Peso.txt. Un monitor di file che "guarda" il file Tara.txt. Un monitor di file che guarda il file PesoStabile.txt.

 

Per conrollare se i dati cambiano all'arrivo del peso possiamo usare il tool "Test Invio Dati". Inseriremo SS000123kg000012g EASCII(13)ASCII(10);SN000456kg000034g EASCII(13)ASCII(10) le due stringhe separate da ";" verranno inviate alternativamente con l'effetto di un continuo variare dei dati sul monitor.

 

Eseguiamo il frame Peso e poi premiamo il pulsante Start di Test Invio Dati. Vedremo i dati passare da un valore all'altro. Dato che il dato Peso e Tara sono in una forma poco presentabile andiamo ad inserire la virgola decimale e l'unità di misura. Selezioniamo il monitor di file Peso e osserviamo le sue proprietà. Come si può vedere c'è la proprietà Unità di Misura che non è settata. Usiamo il mouse e clicchiamo su di essa.

 

Il moltiplicatore ci permette di posizionare la virgola, ma anche di effettuare delle conversioni. Ad esempio se volessimo ottenere i kg e le libbre moltiplicando 2.2. Il numero di Interi 0 indica che gli interi saranno dinamici. il numero di decimali 2 indica che i decimali saranno fissi a 2 con eventuale arrotondamento. Nel nostro caso la moltiplicazione per 0.01 non produrrà arrotondamento.

 

Per quanto riguarda la Tara abbiamo usato "g" come unità di misura, 0 interi, 0 decimali, 1 moltiplicatore.

 

Cancelliamo il monitor di stampa che "guarda" il file Stabile.txt e sostituiamolo con un Led a cui settiamo come file il file Stabile.txt. Per indicare quando il Led deve accendersi e quando deve spegnersi usiamo l'opzione "Messaggio Allarme"

 

Il Messaggio Allarme

Il "Messaggi d'Allarme" serve per avvisare con un suono di un errore oppure serve a disabilitare dei pulsanti quando si verifica una condizione. Quando la condizione è soddifatta i pulsanti vengono Disabilitati o Segnalati con un riquadro verde/rosso. Nel caso di un monitor di file nel caso di errore può esse mostrata un messaggio al posto del contenuto del file e un eventuale messaggio di non errore. Nel caso del led il led si illumina verde nel caso di non errore, si spegne grigio nel caso di errore.

Con il messaggio di allarme è possibile condizionare delle azioni. Nel caso del peso del nostro esempio HelloWorld possiamo condizionere al peso stabile La stampa di un'etichetta.

Questa è la configurazione usata per il led nel caso del file Stabile. La condizione d'errore è se il contenuto del file è "Uguale" a "N". In tal caso il led si spegne e siamo in una condizione di errore, quidi possiamo eventualmente disabilitare un pulsante. Attenzione che fra le possibili "Condizioni" c'e sia "=" che "Uguale". la prima è da intendersi per i valori numerici, la seconda per i testi.

 

Disabilitare la stampa

Continuando il nostro esempio HelloWorld aggiungiamo il pulsante di stampa. Lo troviamo nel Pannello "Componenti" nella sezione "Azioni" con il nome "Monitor di Stampa". Si chiama monitor di stampa perche [ molto pi# che un pulsante, pero è possibile nascondere tutto quello che non vogliamo vedere fino a farlo apparire come un semplice pulsante.

 

Spostiamo il mouse sul frame Peso e clicchiamo nella posizione in cui vogliamo inserire il monitor di stampa.

 

Se si hanno più stampanti o si vuole avere la possibilità di un'anteprima oppure di poter inserire il numero di copie, Il monitor di stampa è bene che mostri tutte le sue opzioni. Ci sono casi però che tali opzioni sono superflue e conviene eliminarle. In questo caso possiamo fleggare Visualizza Pulsante Stampa. poi possiamo ridurre la dimensione del Monitor a quella di un pulsante.

 

Non ci resta che "dire" al Led di disabilitare il pulsante di stampa quando è in errore, cioè quando il peso non è stabile.

 

Selezioniamo il Led e nelle sue prorietà clicchiamo su Disabilita Azione se in Errore. Verrà mostrato un elenco di possibili azioni disabilitabili, Nel nostro caso nel frame ci sono solo due possibili azioni Esci e Stampa. Flegghiamo Stampa.

 

Per verificare il funzionamento del led che disabilita il pulsante di stampa dobbiamo essere sicuri che il pulsante non utilizzi una stampante che stia usando la stessa COM del canale della bilancia. La figura di seguito mostra che avviando il frame Peso, e usando il "Test Ivio Dati" premendo il pulsante manuale si può ossrevare come il pulsante di stampa si abilita in corrispondenza del peso stabile e si disabilita quando il peso non è stabile.